﻿/**
* Родительский класс меню
* @author Firsoff Maxim, ICQ:235859730, email: firsoff_maxim@mail.ru
* @version 0.1/09.03.2008 19:16
*/

package ru.vega_int.firsoff.as3.menu 
{
	import flash.display.Sprite;
	import flash.errors.IllegalOperationError;

	public class Menu extends Sprite implements IMenu
	{
		//	PROPERTIES
		protected var type:String;			//	текущий тип меню
		protected var data:Array;			//	список пунктов
		protected var delimiter:Object;		//	разделитель, объект
		protected var colorSchema:Object;	//	цветовая схема
		protected var fontSchema:Object;	//	схема шрифтов
		protected var _totalItems:uint;		//	колво пунктов
		protected var _containers:Array;	//	массив пунктов
		protected var _lastSelected:MenuItem;	//	последняя нажатая
		
		public static const HORIZONTAL:String = 'horizontal';
		public static const VERTICAL:String = 'vertical';
		public static const DELIMITER_PIXEL:String = 'delimiter_pixel';
		public static const DELIMITER_CHAR:String = 'delimiter_char';
		public static const DELIMITER_MIX:String = 'delimiter_mix';
		//public static const DELIMITER_CHAR_DEFAULT:String = '   ';
		//public static const DELIMITER_PIXEL_DEFAULT:Number = 15;
		//	----------------------------------------------------------------
		/**
		 * Конструктор
		 * @param	data	Данные для меню
		 * @param	type	Тип меню
		 */
		public function Menu(data:Array, delimiter:Object, colorSchema:Object, fontSchema:Object, type:String = Menu.HORIZONTAL) 
		{
			this.data = data;
			this.type = type;
			this.colorSchema = colorSchema;
			this.fontSchema = fontSchema;
			this.delimiter = delimiter;
			_totalItems = data.length;
			_containers = new Array();
			// расшифровка входных данных
			/* data	- массив, каждый член которого объект - {label:String, id:uint}
			 * 
			 * delimiter
			 * 
			 * delimiter.type - Тип. String []
			 * delimiter.chars - Значение. String
			 * delimiter.pixels - Значение. Number
			 * 
			 * colorSchema
			 * 
			 * colorSchema.rollover	- ролловер, uint
			 * colorSchema.rollout	- роллаут, uint
			 * colorSchema.press	- при нажатии, uint
			 * colorSchema.time		- время переключения цветов, Number ?????
			 * 
			 * fontSchema
			 * 
			 * fontSchema.antiAliasType	- тип отображения шрифтов, String из AntiAliasType
			 * fontSchema.thickness	- толщина
			 * fontSchema.sharpness	- резкость
			 * fontSchema.rollover	- шрифт при ролловере, TextFormat
			 * fontSchema.rollout	- 
			 * fontSchema.press		- 
			 */
		};
		
		//	ABSTRACT METHODS
		public function destroy():void{};
		//	------------------------------------------------------
		
		public function setSelectedAt(index:uint) :void
		{
			//trace('index - '+index)
			if(index > _totalItems){throw new IllegalOperationError("Error in param [index = " + index + "] setSelectedAt");}
			else 
			{
				try {_lastSelected.selected = false;}	//	оденем ка презерватив
				catch (e:Error){};
				
				var item:MenuItem = MenuItem(_containers[index]);
				item.selected = true;
				_lastSelected = item;
			};
		};
		
		
		//	GETTERS/SETTERS
		public function get totalItems() :uint{return _totalItems;};
		
		public function get lastSelected() :MenuItem
		{
			return _lastSelected;
		};
		//	------------------------------------------------------
	}
	
}
